XSS
介绍
XSS 的漏洞本质原因是客户端将服务器返回的数据, 作为了 JS 进行执行, 而不是作为数据渲染.
Exploit
对于 XSS 而言, 一般会采取下面的几种方式来扩展攻击:
- 盗取用户身份信息, 窃取会话 Cookie 从而窃取网站用户隐私、账号、浏览历史等等
- 伪授权操作, 通过 JS 发起敏感请求
- 按键记录和钓鱼
- 蠕虫病毒传播, 借助网站进行传播, 使网站的使用用户受到攻击
- 劫持用户会话, 从而知悉任意操作, 比如: 弹窗跳转、篡改页面、网页挂马
- 反射型 XSS
- 存储型 XSS
- Dom 型 XSS
反射型 XSS
info
特点 : pyaload 不会存储在数据库, 一般出现在查询页面(输入内容会直接返回的参数都可能存在反射型XSS)
反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的
攻击者诱导受害者点击包含恶意JavaSctipt代码的URL,当受害者点击这些精心设计的链接后,恶意代码会直接在受害者主机上的浏览器执行;恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行相应的脚本
- 攻击者将payload放置在url链接中(这是针对是GET型反射XSS)
- 用户点击该恶意链接
- web服务将XSS代码(JavaScript代码)以及视图返回给客户端
- 客户端解析视图以及XSS代码(JavaScript代码),并将执行结果发送到XSS平台
- 攻击者访问XSS平台,读取用户的敏感信息(Cookie)
存储型 XSS
info
特点 : payload会存在数据库里面,一般出现在会将数据存储到数据库中并展示在前端页面的功能,如注册页、留言板等
存储型 XSS 是指将应用程序将存在 XSS Payload 的数据未进行过滤检查便存入到数据库中, 当下一次从数据库中获取数据时也没有进行过滤, 直接将其显示在前端, 导致了 XSS Payload 的执行
- 攻击者向web服务插入XSS代码
- web服务会将其结果存储到数据库中
- 用户正常访问web服务
- web服务将数据库的数据以及视图返回给前端,前端渲染视图并加载数据,其中数据里包含恶意XSS代码(JavaScript代码)
- 客户端渲染视图,加载XSS代码,并向攻击者的web服务发送敏感信息
- 攻击者读取用户的敏感信息
DOM 型 XSS
info
不会与服务器交互也不会存储在数据库中, 通过 Dom 操作前端输出的时候产生问题 (相比于前两种较难挖掘, 需要熟悉基础 JS 代码)
客户端的脚本程序可以动态的检查和修改页面内容, 而不依赖于服务端的数据, 比如 客户端如果从URL 中提取数据并在本地执行, 如果用户在客户端的输入数据包含了恶意的 JS 内容, 而这些内容没有经过过滤, 那么应用程序就可能受到 Dom 型 XSS 攻击
- 攻击者将payload放置在url链接中(这是针对是GET型反射XSS)
- 用户点击恶意链接,并打开浏览器
- 此时浏览器客户端并不会发起http请求到web服务,而是在浏览器客户端执行XSS(JavaScript代码)
- 此时将XSS代码执行结果发送给攻击者的恶意服务
- 攻击者访问自己的XSS平台并读取用户的敏感信息
防御
- 输入检查 : 老办法了, 黑白名单、数据类型
- 输出编码 : URL 编码、HTML 编码、JS 编码
- httponly 策略 : 禁止 JS 读取敏感 Cookie (这并不能防御 XSS 漏洞, 只是解决利用 XSS 进行 Cookie 劫持的问题)
- CSP 策略: 个人认为比较完美的解决方式
ByPass
- 使用遍历手段, 看看过滤了哪些字符或者事件函数
- 对于过滤的字符可以尝试编码或者半闭合的手段进行绕过, 对于事件函数可以尝试换其他标签进行操作
- 之后根据具体情况尝试 双写、编码、拼接等等操作
- 去找一些 XSS Payload 集合
Questions
XSS 之间的差别
反射型 | 存储型 | DOM型 | |
---|---|---|---|
攻击对象 | 需要攻击者主动寻找受害者并诱导其访问 | 广撒网,只要有用户访问对应的页面就会触发,危害性更大,范围更广 | 需要攻击者主动寻找受害者并诱导其访问(同反射型) |
持久性 | 一次性 | 只要服务器不宕机,payload不被手动删除,就一直存在 | 一次性 |
触发点 | 网站中直接返回参数内容的功能点 | 网站中将数据直接存储到数据库中,后直接返回数据在前端展示的功能点 | 取决于DOM节点 |
XSS 和 CSRF 的区别
类别 | 特征 |
---|---|
XSS | 1. 主要是加载JavaScript代码,在客户端执行 2. 虽然经过后端,数据库(存储型),但主要需要客户端执行XSS代码,才能生效 3. DOM型XSS一定不经过后端,只是对浏览器客户端发起的攻击 4. XSS攻击针对的是用户层面的攻击 (攻击客户端) |
CSRF | 1. 主要是欺骗服务器,虽然是由用户发起,但是服务器无法判断是否是不是用户想要发起的请求 2. 一定会经过后端处理,不然无法执行 3. CSRF是一种身份伪造攻击,来对服务器进行欺骗的一种攻击手法/ |